/*
 * @lc app=leetcode.cn id=228 lang=cpp
 *
 * [228] 汇总区间
 */

#include <limits.h>

#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <algorithm>
using namespace std;

// @lc code=start
class Solution {
public:
    vector<string> summaryRanges(vector<int>& nums) {
        vector<string> result;      // 保存结果

        // 如果初始数组为空，直接返回
        if (nums.size() == 0) {
            return result;
        }
        
        // 将第一个元素添加到当前区间
        int left = nums[0];        // 当前区间的左端点
        int right = nums[0];       // 当前区间的右端点

        // 遍历数组元素（跳过第一个元素）
        for (int i = 1; i < nums.size(); i++) {
            if (nums[i] == right + 1) {
                right = right + 1;
                continue;
            } else {
                result.push_back(rangeToString(left, right));
                left = nums[i];
                right = nums[i];
            }
        }
        
        // 将最后一个区间保存到结果中
        result.push_back(rangeToString(left, right));
        
        return result;
    }

    // 将数字区间转换为字符串
    string rangeToString(int left, int right) {
        if (left == right) {
            return to_string(left);
        } else {
            return to_string(left) + "->" + to_string(right);
        }
    }
};
// @lc code=end

